#pragma once

#include <string>
#include <map>

#include "keyword/Keyword.hpp"

class KeywordPool
{
protected:
    std::map<std::string, Keyword> keywords;

public:
    void addKeyword(Keyword keyword)
    {
        keywords[keyword.keywordName] = keyword;
    }

    Keyword &getKeyword(std::string KeywordName)
    {
        return keywords[KeywordName];
    }
};

class StdKeywordPool : public KeywordPool
{
public:
    StdKeywordPool()
    {
        // nouns
        addKeyword(Keyword("noun"));
        addKeyword(Keyword("paper"));
        addKeyword(Keyword("page"));

        // pronouns
        addKeyword(Keyword("pronoun"));
        addKeyword(Keyword("reference"));
        addKeyword(Keyword("i"));
        addKeyword(Keyword("me"));
        addKeyword(Keyword("you"));
        addKeyword(Keyword("he"));
        addKeyword(Keyword("him"));
        addKeyword(Keyword("she"));
        addKeyword(Keyword("her"));
        addKeyword(Keyword("they"));
        addKeyword(Keyword("them"));

        // verbs
        addKeyword(Keyword("verb"));
        addKeyword(Keyword("do"));
        addKeyword(Keyword("write"));
        addKeyword(Keyword("read"));
        addKeyword(Keyword("see"));

        // prepositions
        addKeyword(Keyword("preposition"));
        addKeyword(Keyword("on"));
        addKeyword(Keyword("of"));
        addKeyword(Keyword("from"));
        addKeyword(Keyword("to"));
    }
};

StdKeywordPool stdPool;
